#ifndef  _BSP_LED_H_
#define  _BSP_LED_H_

#define LED_SCAN_TIME       50  //单位ms

typedef struct {
    u8 redpat;
    u8 bluepat;
    u8 unit;
    u8 cycle;
} led_cfg_t;

typedef struct {
    u8 rled_sta;    //红灯 亮-灭控制
    u8 bled_sta;    //蓝灯 亮-灭控制
    u8 unit;        //50ms单位 (范围：1~255)
    u8 period;      //间隔周期 (范围：0~255)
    u32 cnt;
    u16 circle;

    bool lowbat;
} led_cb_t;

enum {
    LED_USER_POWER_ON = 1,  //开机
    LED_USER_CLEAR_PAIR,    //配对
    LED_USER_CONN,          //连接
    LED_USER_LOW_BAT,       //低电
};

typedef struct {
    void (*port_init)(gpio_t *g);
    void (*set_on)(gpio_t *g);
    void (*set_off)(gpio_t *g);
} led_func_t;

extern led_func_t bled_func;
extern led_func_t rled_func;
extern gpio_t bled_gpio;
extern gpio_t rled_gpio;

void led_func_init(void);
void m_led2_port_init(gpio_t *g, bool ext_res);
void m_port_2led_scan(gpio_t *g);
void led_cfg_port_init(gpio_t *g);
void led_cfg_set_onoff(gpio_t *g, bool onoff);


#if LED_DISP_EN
    extern volatile int port2led_sta;
    void led_disp_proc(void);
    void led_set_sta_normal(const led_cfg_t *cfg);
    #define led_set_sta(cfg)       led_set_sta_normal(cfg)
    void led_cfg_port_init(gpio_t *g);
    void led_cfg_set_on(gpio_t *g);
    void led_cfg_set_off(gpio_t *g);
    void led_mux_cfg_port_init(gpio_t *g);
    #define led_mux_cfg_set_on(g)       led_cfg_set_on(g)
    #define led_mux_cfg_set_off(g)      led_cfg_set_off(g)
    void led_lowbat(void);
    void led2_port_init(gpio_t *g);
    void bled2_set_on(gpio_t *g);
    void bled2_set_off(gpio_t *g);
    void rled2_set_on(gpio_t *g);
    void rled2_set_off(gpio_t *g);
#if LED_PWR_EN
    void port_2led_scan(void);
    bool port_2led_is_sleep_en(void);
#else
    #define port_2led_scan()
    #define port_2led_is_sleep_en()         1
#endif // LED_PWR_EN
    void bled_set_off(void);
    void bled_set_on(void);
    void led_init(void);
    void bled_off(void);
    void rled_off(void);
    void led_scan(void);
    void led_bt_connected(void);
    void led_bt_connectting(void);
    bool led_bt_sleep(void);
    void charge_led_off(void);
    void charge_led_on(void);
    void rled_set_off(void);
    void rled_set_tog(void);
    void rled_set_on(void);
#else
    #define led_set_sta(cfg)
    #define led_cfg_set_sta(x)
    #define led_cfg_port_init(x)
    #define led_cfg_set_on(x)
    #define led_cfg_set_off(x)
    #define led_mux_cfg_port_init(x)
    #define led_mux_cfg_set_on(x)
    #define led_mux_cfg_set_off(x)
    #define led_disp_proc();
    #define bled_set_on()
    #define led_init()
    #define bled_off()
    #define rled_off()
    #define led_scan()
    #define led_bt_connected()
    #define led_bt_sleep()                  0
    #define charge_led_off()
    #define charge_led_on()
    #define led_lowbat()
    #define led2_port_init(x)
    #define bled2_set_on(x)
    #define bled2_set_off(x)
    #define rled2_set_on(x)
    #define rled2_set_off(x)
    #define port_2led_scan()
    #define port_2led_is_sleep_en()         1
#endif

#endif //_BSP_LED_H_
